load

library(tidyverse)
── Attaching packages ───────────────────────────────────────────────────────── tidyverse 1.2.1 ──
✔ ggplot2 3.1.0     ✔ purrr   0.2.5
✔ tibble  1.4.2     ✔ dplyr   0.7.8
✔ tidyr   0.8.2     ✔ stringr 1.3.1
✔ readr   1.3.1     ✔ forcats 0.3.0
── Conflicts ──────────────────────────────────────────────────────────── tidyverse_conflicts() ──
✖ dplyr::filter() masks stats::filter()
✖ dplyr::lag()    masks stats::lag()
library(lubridate)

Attaching package: ‘lubridate’

The following object is masked from ‘package:base’:

    date
library(forecast)
library(ggrepel)
library(rvest)
Loading required package: xml2

Attaching package: ‘rvest’

The following object is masked from ‘package:purrr’:

    pluck

The following object is masked from ‘package:readr’:

    guess_encoding
library(plotly)

Attaching package: ‘plotly’

The following object is masked from ‘package:ggplot2’:

    last_plot

The following object is masked from ‘package:stats’:

    filter

The following object is masked from ‘package:graphics’:

    layout
library(xtable)
dja <- read_csv("data/DJA.csv",skip = 4)
gold <- read_csv("data/GOLD_1791-2018.csv",skip = 2)
interest_rate <- read_csv("data/INTERESTRATE_1857-2018.csv",skip = 1)
sap <- read_csv("data/SAP_1871-2018.csv", skip=1)
cpi <- read_csv("data/USCPI_1774-2018.csv", skip=3)
gdp <- read_csv("data/USGDP_1790-2018.csv", skip=2)
wage <- read_csv("data/USWAGE_1774-2018.csv")
gdp_uk <-  read_csv("data/UKGDP_1700-2017.csv", skip=1)

brit_gold <- read_csv("data/GOLD_brit_1257-1945.csv", skip=1)
gold_london <- read_csv("data/GOLD_london_1718-2017.csv", skip = 1)

Down Jones Avg

el dja es una serie diaria, todas las demás son anuales.

dja <- dja %>% 
  mutate(Date = parse_date_time(Date,orders = "mdy"))

ggplotly(ggplot(dja,aes(Date, DJIA))+
  geom_line()) %>% 
  layout(legend = list(
      orientation = "h"))


summary(dja)
      Date                          DJIA         
 Min.   :1885-05-02 00:00:00   Min.   :   24.36  
 1st Qu.:1916-02-09 06:00:00   1st Qu.:   70.41  
 Median :1946-10-14 12:00:00   Median :  199.28  
 Mean   :1949-03-11 07:36:39   Mean   : 2354.03  
 3rd Qu.:1982-06-06 06:00:00   3rd Qu.: 1002.07  
 Max.   :2018-09-10 00:00:00   Max.   :26616.71  

dja %>% 
  mutate(dif = (DJIA - lag(DJIA, default = DJIA[1]))/lag(DJIA, default = DJIA[1])) %>% 
ggplot(.,aes(Date, dif))+
  geom_rect(fill="firebrick", 
            xmin=parse_date_time("01-01-1930",orders = "mdy"),
            xmax=parse_date_time("01-01-1940",orders = "mdy"),
            ymin=-1,
            ymax=1,
            alpha=0.5)+
    geom_line()

armo una lista de las crisis conocidas

Crisis

url <- "https://www.caproasia.com/2016/04/12/economic-crisis-since-1900-2015/"
crisis <- url %>%
  read_html() %>% 
  html_nodes(css = 'table') %>% 
  html_table(header = T)

crisis <- crisis[[1]] %>% 
  filter(Affected %in% c("United States","Global")) %>% 
  separate(Period,c("desde","hasta")," – ")
Expected 2 pieces. Missing pieces filled with `NA` in 10 rows [1, 4, 5, 6, 7, 8, 9, 10, 11, 12].
#en realidad las que terminan en "s" no duran toda la década. Las agrego a mano.
  # mutate(hasta = parse_date_time(case_when(grepl("s",desde)~as.numeric(str_extract(desde,"[[:digit:]]*"))+10,
  #                          TRUE~ as.numeric(hasta)),"y"),
  #        desde = parse_date_time(str_extract(desde,"[[:digit:]]*"),"y"))

crisis <- crisis %>% 
  mutate(hasta = parse_date_time(case_when(desde=="1970s"~"1979",
                           desde=="1980s"~"1982",
                           desde == "1990s"~"1991",
                           TRUE~hasta),"y"),
         desde = parse_date_time(case_when(desde=="1970s"~"1973",
                           desde=="1980s"~"1981",
                           desde=="1990s"~"1990",
                           TRUE~desde),"y"))
crisis_largas <- na.omit(crisis)
crisis_puntuales <- crisis %>% 
  filter(is.na(hasta))


dja <- dja %>% 
  mutate(dif = (DJIA - lag(DJIA, default = DJIA[1]))/lag(DJIA, default = DJIA[1])) 
ggplot()+
  geom_rect(data= crisis_largas, 
            aes(xmin=crisis_largas$desde,
            xmax=crisis_largas$hasta),
            fill="firebrick", 
            ymin=-1,
            ymax=1,
            alpha=0.5)+
    geom_line(data = dja,aes(Date, dif))+
  geom_vline(data=crisis_puntuales, aes(xintercept=desde), color = "red", linetype="dashed")

NA
NA

Este gráfico me da la sensación de que todo estuviera corrido a la derecha (mirando las crisis puntuales vs los picos)

Gold

gold %>% 
  ggplot(., aes(Year, `New York Market Price (U.S. dollars per fine ounce)`))+
  geom_line(size=1)+
  geom_vline(xintercept = 1971, color = "red")+
  geom_label_repel(data=data_frame(),aes(x=1971,y=1000,label="Fin del patrón oro"),nudge_x = -5,force=10,size=7)+
  theme_minimal()+
  labs(y="Dólares por onza de oro", x="Año", title="Precio Oro Mercado de Nueva York",
       subtitle = "Precio por onza. 1790-2017")+
  theme(text = element_text(size = 20))


ggsave("plots/oro.png", dpi=300, width = 10, height = 7, scale=1)

gold %>% 
  ggplot(., aes(Year, `New York Market Price (U.S. dollars per fine ounce)`))+
  geom_line(size=1)+
  geom_vline(xintercept = 1971, color = "red")+
  geom_label_repel(data=data_frame(),aes(x=1971,y=1000,label="End of the gold standard"),nudge_x = -5,force=10,size=7)+
  theme_minimal()+
  labs(y="dollars per fine ounce", x="Year", title="Gold prices New York Market",
       subtitle = " Price per ounce. 1790-2017")+
  theme(text = element_text(size = 20))

ggsave("plots/oro_en.png", dpi=300, width = 10, height = 7, scale=1)

interest_rate

graf <- interest_rate %>% 
  gather(type,rate,2:4) %>% 
  ggplot(., aes(Year,rate,color=type))+
  geom_line()+
  guides(color=guide_legend(nrow=2,byrow=TRUE))+
  theme(legend.position = "bottom")
ggplotly(graf) %>%
  layout(legend = list(
      orientation = "h"
    )
  )
  • La tasa de largo plazo es una serie mucho más suave (eso es un dato conocido de finanzas no?)
  • Los surplus funds también parecen ser más volátiles hasta los 40

sap

sap %>% 
  summary()
      Year      The S&P Index Average for January  Annual Yield  
 Min.   :1871   Min.   :   3.240                  Min.   :1.140  
 1st Qu.:1908   1st Qu.:   7.433                  1st Qu.:3.310  
 Median :1944   Median :  16.430                  Median :4.500  
 Mean   :1944   Mean   : 261.888                  Mean   :4.356  
 3rd Qu.:1981   3rd Qu.: 122.058                  3rd Qu.:5.390  
 Max.   :2018   Max.   :2791.730                  Max.   :8.710  
                                                  NA's   :1      
 The Accumulated S&P Index Average for January
 Min.   :     1.0                             
 1st Qu.:    11.5                             
 Median :   122.0                             
 Mean   : 21442.8                             
 3rd Qu.:  5360.0                             
 Max.   :298189.7                             
                                              
sap %>% 
  gather(type, value,2:4) %>%
  mutate(type= case_when(type=="The S&P Index Average for January"~"The S&P Index\nAverage for January",
                         type=="The Accumulated S&P Index Average for January"~"The Accumulated S&P\nIndex Average for January",
                         TRUE~type)) %>% 
  ggplot(.,aes(Year,value, color=type))+
  geom_line()+
  facet_grid(type~.,scale="free")+
  theme(legend.position = "bottom",
        strip.text.y = element_text(angle = 0))

ts(sap$`Annual Yield`, start=min(sap$Year), frequency = 1) %>% 
  na.omit() %>%
  auto.arima(.)
Series: . 
ARIMA(0,1,2) 

Coefficients:
          ma1      ma2
      -0.0141  -0.3007
s.e.   0.0802   0.0810

sigma^2 estimated as 0.4111:  log likelihood=-141.37
AIC=288.73   AICc=288.9   BIC=297.68

CPI


cpi %>% 
  ggplot(., aes(Year, `U.S. Consumer Price Index *`))+
  geom_line(size=1)+
  geom_vline(xintercept = 1971, color = "red")+
  geom_label_repel(data=data_frame(),aes(x=1971,y=100,label="Fin del patrón oro"),nudge_x = -5,force=10,size=7)+
  theme_minimal()+
  labs(y="IPC", x="Año")+
  theme(text = element_text(size = 20))

ggsave("plots/cpi_orig.png", scale = 1)
Saving 7.07 x 4.36 in image

gdp

gdp %>% 
  ggplot(., aes(Year, `Real GDP (millions of 2012 dollars)`))+
  geom_line(size=1)+
  # geom_vline(xintercept = 1971, color = "red")+
  # geom_label_repel(data=data_frame(),aes(x=1971,y=100,label="Fin del patrón oro"),nudge_x = -5,force=10,size=7)+
  theme_minimal()+
  labs(y="Real GDP", x="Año")+
  theme(text = element_text(size = 30))

ggsave("plots/PBI.png", scale = 1)
Saving 7.07 x 4.36 in image

me interesa ver el PBI normalizado por el crecimiento poblacional, y además normalizado por la cantidad de oro que puede comprar (en lugar de normalizar por el CPI):



gdp <- left_join(gold, gdp, by = "Year") %>% 
  mutate(gdp_in_gold = `Nominal GDP per capita (current dollars)`/`New York Market Price (U.S. dollars per fine ounce)`,
         Year = parse_date_time(Year,"y")) 
  
ggplotly(ggplot(gdp,aes(Year,gdp_in_gold))+
  geom_line())

A partir del 1900 pareciera que se arman 3 ciclos muy largos

  • 1914-1933
  • 1933-1980
  • 1980-2012

Agregando referencias históricas de las crisis conocidas # gdp_in_gold_eda.PNG

ggplot()+
geom_rect(data= crisis_largas, 
            aes(xmin=crisis_largas$desde,
            xmax=crisis_largas$hasta),
            fill="firebrick", 
            ymin=-Inf,
            ymax=Inf,
            alpha=0.5)+
  geom_line(size=1,
    data = gdp %>% 
              filter(Year>parse_date_time(1900,"y"))
            ,aes(Year, gdp_in_gold))+
  geom_vline(data=crisis_puntuales, aes(xintercept=desde), color = "red", linetype="dashed")+
  geom_vline(xintercept = parse_date_time(1971,"y"),color = "gold")+ 
  scale_x_datetime(breaks = parse_date_time(seq(1900,2017, 15),'y'), labels = date_format("%Y"))+
  # scale_x_datetime(date_breaks = "15 years",labels = date_format("%Y") )+  
  theme_minimal()+
  labs(x="", y="GDP in gold", title="US GDP",
       subtitle= "Millions of ounces of gold, 1900-2017")+
  theme(text = element_text(size = 20))

ggsave("plots/gdp_in_gold_eda_en.PNG", dpi = 300, width = 10,height = 6)

La guerra de sesesión de EEUU fué entre el 12 de abril de 1861 y el 9 de abril de 1865

A partir de ahí el pbi en oro crece hasta el fin del patron oro.

wage

wage %>% 
  summary()
      Year      Costs of Unskilled Labor (index 1860 = 100)
 Min.   :1774   Min.   :   31.00                           
 1st Qu.:1835   1st Qu.:   79.65                           
 Median :1896   Median :  143.50                           
 Mean   :1896   Mean   : 2499.49                           
 3rd Qu.:1956   3rd Qu.: 1682.75                           
 Max.   :2017   Max.   :19640.40                           
                                                           
 Production Workers Hourly Compensation (nominal dollars)
 Min.   : 0.020                                          
 1st Qu.: 0.060                                          
 Median : 0.150                                          
 Mean   : 3.906                                          
 3rd Qu.: 2.555                                          
 Max.   :32.390                                          
 NA's   :16                                              

Podemos deflactar el salario horario por el CPI

ggplotly(
wage %>% 
  left_join(cpi,by="Year") %>% 
  na.omit() %>% 
  mutate(salario_horario_real = `Production Workers Hourly Compensation (nominal dollars)`/`U.S. Consumer Price Index *`) %>% 
  ggplot(.,aes(Year,salario_horario_real))+
  geom_line() 
  )
wage %>% 
  summary()

Podemos deflactar el salario horario por el CPI

ggplotly(
wage %>% 
  left_join(cpi,by="Year") %>% 
  na.omit() %>% 
  mutate(salario_horario_real = `Production Workers Hourly Compensation (nominal dollars)`/`U.S. Consumer Price Index *`) %>% 
  ggplot(.,aes(Year,salario_horario_real))+
  geom_line() 
  )
wg_gold <- wage %>% 
  filter(Year>=1900) %>% 
  left_join(gold, gdp, by = "Year") %>% 
  mutate(wg_in_gold = `Production Workers Hourly Compensation (nominal dollars)`/`New York Market Price (U.S. dollars per fine ounce)`,
         Year = parse_date_time(Year,"y")) %>% 
  na.omit()  


ggplot()+
geom_rect(data= crisis_largas, 
            aes(xmin=crisis_largas$desde,
            xmax=crisis_largas$hasta),
            fill="firebrick", 
            ymin=-Inf,
            ymax=Inf,
            alpha=0.5)+
  geom_line(size=1,data = wg_gold, aes(Year, wg_in_gold))+
  geom_vline(data=crisis_puntuales, aes(xintercept=desde), color = "red", linetype="dashed")+
  geom_vline(xintercept = parse_date_time(1971,"y"),color = "gold")+ #fin del patron oro
  scale_x_datetime(breaks = parse_date_time(seq(1900,2017, 15),'y'), labels = date_format("%Y"))+
  # scale_x_datetime(date_breaks = "15 years",labels = date_format("%Y") )+
  theme_minimal()+  
  labs(x="", y="Salario en oro", title="Salario horario Estados Unidos",
       subtitle="Onzas de oro, 1900-2017")+
  theme(text = element_text(size = 20))


ggsave("plots/wg_in_gold_eda.PNG", dpi = 300, width = 10,height = 6)

ggplot()+
geom_rect(data= crisis_largas, 
            aes(xmin=crisis_largas$desde,
            xmax=crisis_largas$hasta),
            fill="firebrick", 
            ymin=-Inf,
            ymax=Inf,
            alpha=0.5)+
  geom_line(size=1,data = wg_gold, aes(Year, wg_in_gold))+
  geom_vline(data=crisis_puntuales, aes(xintercept=desde), color = "red", linetype="dashed")+
  geom_vline(xintercept = parse_date_time(1971,"y"),color = "gold")+ #fin del patron oro
  #scale_x_datetime(date_breaks = "15 years",labels = date_format("%Y") )+
  scale_x_datetime(breaks = parse_date_time(seq(1900,2017, 15),'y'), labels = date_format("%Y"))+
  theme_minimal()+  
  labs(x="", y="Wage in gold", title="US Hourly Wage",
       subtitle="Ounces of gold, 1900-2017")+
  theme(text = element_text(size = 20))


ggsave("plots/wg_in_gold_eda_en.PNG", dpi = 300, width = 10,height = 6)

Se ven los mismos tres períodos. Pero a diferencia del GDP, el período 1980-2012 tiene un nivel más bajo que el anterior.

¿ Si quisieramos comparar ingrsos con algún revenue tendríamos usar S&P o DJA?

UK

oro <- full_join(brit_gold,gold_london)
Joining, by = "Year"
names(oro)
[1] "Year"                                                                                  
[2] "British Official Price (British pounds per fine ounce end of year)"                    
[3] "London Market Price (British &pound; [1718-1949] or U.S. $ [1950-2011] per fine ounce)"

#de http://fx.sauder.ubc.ca/data.html
tc <- read_csv("data/ex_rate.csv")
Parsed with column specification:
cols(
  `MMM YYYY` = col_character(),
  `GBP/USD` = col_double()
)
library(lubridate)

tc <- tc %>% mutate(date = parse_date_time(`MMM YYYY`,"my"),
              Year = year(date)) %>% 
  group_by(Year) %>% 
  summarise(gbp_usd = mean(`GBP/USD`))


#de http://fx.sauder.ubc.ca/etc/USDpages.pdf

tc_1950_1970 <- data_frame(Year=1950:1970, gbp_usd = 0.35714) %>% 
  mutate(gbp_usd = case_when(Year ==1967 ~ 0.36210,
                             Year >1967 ~ 0.41667,
                             TRUE ~ gbp_usd))

tc <- bind_rows(tc_1950_1970,tc)
tc

expreso al oro siempre en pounds

tail(oro)


oro$`London Market Price (British &pound; [1718-1949] or U.S. $ [1950-2011] per fine ounce)`
  [1]      NA      NA      NA      NA      NA      NA      NA      NA      NA      NA      NA
 [12]      NA      NA      NA      NA      NA      NA      NA      NA      NA      NA      NA
 [23]      NA      NA      NA      NA      NA      NA      NA      NA      NA      NA      NA
 [34]      NA      NA      NA      NA      NA      NA      NA      NA      NA      NA      NA
 [45]      NA      NA      NA      NA      NA      NA      NA      NA      NA      NA      NA
 [56]      NA      NA      NA      NA      NA      NA      NA      NA      NA      NA      NA
 [67]      NA      NA      NA      NA      NA      NA      NA      NA      NA      NA      NA
 [78]      NA      NA      NA      NA      NA      NA      NA      NA      NA      NA      NA
 [89]      NA      NA      NA      NA      NA      NA      NA      NA      NA      NA      NA
[100]      NA      NA      NA      NA      NA      NA      NA      NA      NA      NA      NA
[111]      NA      NA      NA      NA      NA      NA      NA      NA      NA      NA      NA
[122]      NA      NA      NA      NA      NA      NA      NA      NA      NA      NA      NA
[133]      NA      NA      NA      NA      NA      NA      NA      NA      NA      NA      NA
[144]      NA      NA      NA      NA      NA      NA      NA      NA      NA      NA      NA
[155]      NA      NA      NA      NA      NA      NA      NA      NA      NA      NA      NA
[166]      NA      NA      NA      NA      NA      NA      NA      NA      NA      NA      NA
[177]      NA      NA      NA      NA      NA      NA      NA      NA      NA      NA      NA
[188]      NA      NA      NA      NA      NA      NA      NA      NA      NA      NA      NA
[199]      NA      NA      NA      NA      NA      NA      NA      NA      NA      NA      NA
[210]      NA      NA      NA      NA      NA      NA      NA      NA      NA      NA      NA
[221]      NA      NA      NA      NA      NA      NA      NA      NA      NA      NA      NA
[232]      NA      NA      NA      NA      NA      NA      NA      NA      NA      NA      NA
[243]      NA      NA      NA      NA      NA      NA      NA      NA      NA      NA      NA
[254]      NA      NA      NA      NA      NA      NA      NA      NA      NA      NA      NA
[265]      NA      NA      NA      NA      NA      NA      NA      NA      NA      NA      NA
[276]      NA      NA      NA      NA      NA      NA      NA      NA      NA      NA      NA
[287]      NA      NA      NA      NA      NA      NA      NA      NA      NA      NA      NA
[298]      NA      NA      NA      NA      NA      NA      NA      NA      NA      NA      NA
[309]      NA      NA      NA      NA      NA      NA      NA      NA      NA      NA      NA
[320]      NA      NA      NA      NA      NA      NA      NA      NA      NA      NA      NA
[331]      NA      NA      NA      NA      NA      NA      NA      NA      NA      NA      NA
[342]      NA      NA      NA      NA      NA      NA      NA      NA      NA      NA      NA
[353]      NA      NA      NA      NA      NA      NA      NA      NA      NA      NA      NA
[364]      NA      NA      NA      NA      NA      NA      NA      NA      NA      NA      NA
[375]      NA      NA      NA      NA      NA      NA      NA      NA      NA      NA      NA
[386]      NA      NA      NA      NA      NA      NA      NA      NA      NA      NA      NA
[397]      NA      NA      NA      NA      NA      NA      NA      NA      NA      NA      NA
[408]      NA      NA      NA      NA      NA      NA      NA      NA      NA      NA      NA
[419]      NA      NA      NA      NA      NA      NA      NA      NA      NA      NA      NA
[430]      NA      NA      NA      NA      NA      NA      NA      NA      NA      NA      NA
[441]      NA      NA      NA      NA      NA      NA      NA      NA      NA      NA      NA
[452]      NA      NA      NA      NA      NA      NA      NA      NA      NA      NA    4.31
[463]    4.26    4.31    4.26    4.25    4.26    4.25    4.25    4.25    4.25    4.28    4.30
[474]    4.29    4.26    4.26    4.27    4.26    4.28    4.26    4.26    4.26    4.25    4.25
[485]    4.27    4.28    4.30    4.31    4.29    4.25    4.28    4.26    4.25    4.26    4.25
[496]    4.26    4.27    4.25    4.25    4.25    4.25    4.30    4.33    4.30    4.35    4.32
[507]    4.37    4.26    4.26    4.31    4.34    4.32    4.38    4.37    4.35    4.35    4.25
[518]    4.24    4.23    4.23    4.23    4.23    4.23    4.23    4.23    4.23    4.25    4.25
[529]    4.24    4.23    4.23    4.23    4.23    4.23    4.23    4.23    4.23    4.23    4.23
[540]    4.23    4.23    4.25    4.24    4.26    4.29    4.31    4.34    4.36    4.36    4.42
[551]    4.47    4.52    4.58    4.63    5.19    5.48    5.76    5.21    4.99    4.36    4.33
[562]    4.44    4.36    4.25    4.25    4.24    4.23    4.23    4.24    4.23    4.23    4.23
[573]    4.24    4.24    4.25    4.24    4.24    4.24    4.24    4.24    4.24    4.24    4.25
[584]    4.24    4.24    4.24    4.24    4.24    4.24    4.24    4.24    4.24    4.24    4.24
[595]    4.24    4.24    4.24    4.24    4.24    4.24    4.24    4.24    4.24    4.24    4.24
[606]    4.24    4.24    4.24    4.24    4.24    4.24    4.24    4.24    4.24    4.24    4.24
[617]    4.24    4.24    4.24    4.24    4.24    4.24    4.24    4.24    4.24    4.24    4.24
[628]    4.24    4.24    4.24    4.24    4.24    4.24    4.24    4.25    4.25    4.25    4.24
[639]    4.24    4.25    4.25    4.25    4.24    4.25    4.25    4.24    4.25    4.25    4.24
[650]    4.25    4.25    4.25    4.24    4.24    4.24    4.24    4.24    4.24    4.24    4.24
[661]    4.24    4.24    4.50    5.65    5.35    4.67    4.51    4.69    4.27    4.25    4.25
[672]    4.25    4.25    4.25    4.63    5.90    6.24    6.88    7.11    7.01    7.04    7.13
[683]    7.72    8.40    8.40    8.40    8.40    8.40    8.40    8.40    8.40    8.40    8.40
[694]   34.71   34.71   34.71   34.71   34.96   35.01   35.00   34.95   35.10   35.09   35.28
[705]   35.15   35.10   35.09   35.09   35.13   35.17   35.19   38.69   41.09   35.94   40.80
[716]   58.16   97.32  159.26  161.02  124.84  147.71  193.22  306.68  612.56  460.03  375.67
[727]  424.35  360.48  317.28  367.51  446.47  437.05  381.43  383.47  362.18  343.73  359.77
[738]  384.01  384.16  387.69  331.10  294.16  278.64  279.03  271.04  309.68  363.32  409.17
[749]  444.45  603.77  695.39  871.96  972.35 1224.53 1571.52 1668.98 1411.23 1266.40 1160.06
[760] 1250.74 1257.12
oro <- oro %>% 
  filter(Year %in% c(1700:2017)) %>% 
  mutate(serie_unificada = case_when(Year < 1718 ~ `British Official Price (British pounds per fine ounce end of year)`,
                                     Year >=1718 ~`London Market Price (British &pound; [1718-1949] or U.S. $ [1950-2011] per fine ounce)`))

## Tengo que pasar todo a libras, desde 1950 al serie esta en dólares

oro <- oro %>% 
  left_join(tc) %>% 
  mutate(serie_unificada = case_when(Year>1950 ~ serie_unificada*gbp_usd,
                                     TRUE ~ serie_unificada))
Joining, by = "Year"
  
ggplot(oro, aes(Year, serie_unificada))+
  geom_line()

PBI uk en oro

gdp_uk %>% 
  filter(Year %in% c(1700:1900)) %>% 
ggplot(., aes(Year, gdp_in_gold))+
  geom_line(size=1)+
  geom_text_repel(data = crisis, aes(Year, crisis,label=Year),nudge_x = 5, nudge_y = -20,force=12,size=4)+
  theme_minimal()+
  labs(y="PBI en oro", x="Año", title= "Producto Bruto Interno Reino Unido", 
       subtitle="Millones de onzas de oro. 1700-1900")+
  theme(text = element_text(size = 20))
gdp_uk %>% 
  filter(Year %in% c(1700:1900)) %>% 
ggplot(., aes(Year, gdp_in_gold))+
  geom_line(size=1)+
  geom_text_repel(data = crisis, aes(Year, crisis,label=Year),nudge_x = 5, nudge_y = -20,force=12,size=4)+
  theme_minimal()+
  labs(y="PBI en oro", x="Año", title= "Producto Bruto Interno Reino Unido", 
       subtitle="Millones de onzas de oro. 1700-1900")+
  theme(text = element_text(size = 20))

ggsave("plots/uk_gdp.png",scale = 1)
Saving 7.07 x 4.36 in image

gdp_uk %>% 
  filter(Year %in% c(1700:1900)) %>% 
ggplot(., aes(Year, gdp_in_gold))+
  geom_line(size=1)+
  geom_text_repel(data = crisis, aes(Year, crisis,label=Year),nudge_x = 5, nudge_y = -20,force=12,size=4)+
  theme_minimal()+
  labs(y="GDP in gold", x="", title= "UK GDP", 
       subtitle="Millions of ounces of gold. 1700-1900")+
  theme(text = element_text(size = 20))


ggsave("plots/uk_gdp_en.png",scale = 1)
Saving 7.07 x 4.36 in image

gdp_uk %>% 
  write_csv("data/gdp_uk_gold.csv")
LS0tCnRpdGxlOiAiRXhwbG9yYXRvcnkgRGF0YSBBbmFseXNpcyIKb3V0cHV0OiBodG1sX25vdGVib29rCi0tLQoKIyMgbG9hZAoKYGBge3Igc2V0dXB9CmxpYnJhcnkodGlkeXZlcnNlKQpsaWJyYXJ5KGx1YnJpZGF0ZSkKbGlicmFyeShmb3JlY2FzdCkKbGlicmFyeShnZ3JlcGVsKQpsaWJyYXJ5KHJ2ZXN0KQpsaWJyYXJ5KHBsb3RseSkKbGlicmFyeSh4dGFibGUpCmBgYAoKCmBgYHtyLCBtZXNzYWdlPUZBTFNFfQpkamEgPC0gcmVhZF9jc3YoImRhdGEvREpBLmNzdiIsc2tpcCA9IDQpCmdvbGQgPC0gcmVhZF9jc3YoImRhdGEvR09MRF8xNzkxLTIwMTguY3N2Iixza2lwID0gMikKaW50ZXJlc3RfcmF0ZSA8LSByZWFkX2NzdigiZGF0YS9JTlRFUkVTVFJBVEVfMTg1Ny0yMDE4LmNzdiIsc2tpcCA9IDEpCnNhcCA8LSByZWFkX2NzdigiZGF0YS9TQVBfMTg3MS0yMDE4LmNzdiIsIHNraXA9MSkKY3BpIDwtIHJlYWRfY3N2KCJkYXRhL1VTQ1BJXzE3NzQtMjAxOC5jc3YiLCBza2lwPTMpCmdkcCA8LSByZWFkX2NzdigiZGF0YS9VU0dEUF8xNzkwLTIwMTguY3N2Iiwgc2tpcD0yKQp3YWdlIDwtIHJlYWRfY3N2KCJkYXRhL1VTV0FHRV8xNzc0LTIwMTguY3N2IikKZ2RwX3VrIDwtICByZWFkX2NzdigiZGF0YS9VS0dEUF8xNzAwLTIwMTcuY3N2Iiwgc2tpcD0xKQoKYnJpdF9nb2xkIDwtIHJlYWRfY3N2KCJkYXRhL0dPTERfYnJpdF8xMjU3LTE5NDUuY3N2Iiwgc2tpcD0xKQpnb2xkX2xvbmRvbiA8LSByZWFkX2NzdigiZGF0YS9HT0xEX2xvbmRvbl8xNzE4LTIwMTcuY3N2Iiwgc2tpcCA9IDEpCmBgYAoKCiMjIERvd24gSm9uZXMgQXZnCmVsIGRqYSBlcyB1bmEgc2VyaWUgZGlhcmlhLCB0b2RhcyBsYXMgZGVtw6FzIHNvbiBhbnVhbGVzLgoKYGBge3J9CmRqYSA8LSBkamEgJT4lIAogIG11dGF0ZShEYXRlID0gcGFyc2VfZGF0ZV90aW1lKERhdGUsb3JkZXJzID0gIm1keSIpKQoKZ2dwbG90bHkoZ2dwbG90KGRqYSxhZXMoRGF0ZSwgREpJQSkpKwogIGdlb21fbGluZSgpKSAlPiUgCiAgbGF5b3V0KGxlZ2VuZCA9IGxpc3QoCiAgICAgIG9yaWVudGF0aW9uID0gImgiKSkKCnN1bW1hcnkoZGphKQpgYGAKCgpgYGB7cn0KCmRqYSAlPiUgCiAgbXV0YXRlKGRpZiA9IChESklBIC0gbGFnKERKSUEsIGRlZmF1bHQgPSBESklBWzFdKSkvbGFnKERKSUEsIGRlZmF1bHQgPSBESklBWzFdKSkgJT4lIApnZ3Bsb3QoLixhZXMoRGF0ZSwgZGlmKSkrCiAgZ2VvbV9yZWN0KGZpbGw9ImZpcmVicmljayIsIAogICAgICAgICAgICB4bWluPXBhcnNlX2RhdGVfdGltZSgiMDEtMDEtMTkzMCIsb3JkZXJzID0gIm1keSIpLAogICAgICAgICAgICB4bWF4PXBhcnNlX2RhdGVfdGltZSgiMDEtMDEtMTk0MCIsb3JkZXJzID0gIm1keSIpLAogICAgICAgICAgICB5bWluPS0xLAogICAgICAgICAgICB5bWF4PTEsCiAgICAgICAgICAgIGFscGhhPTAuNSkrCiAgICBnZW9tX2xpbmUoKQoKYGBgCgphcm1vIHVuYSBsaXN0YSBkZSBsYXMgY3Jpc2lzIGNvbm9jaWRhcwoKIyBDcmlzaXMKCmBgYHtyfQp1cmwgPC0gImh0dHBzOi8vd3d3LmNhcHJvYXNpYS5jb20vMjAxNi8wNC8xMi9lY29ub21pYy1jcmlzaXMtc2luY2UtMTkwMC0yMDE1LyIKY3Jpc2lzIDwtIHVybCAlPiUKICByZWFkX2h0bWwoKSAlPiUgCiAgaHRtbF9ub2Rlcyhjc3MgPSAndGFibGUnKSAlPiUgCiAgaHRtbF90YWJsZShoZWFkZXIgPSBUKQoKY3Jpc2lzIDwtIGNyaXNpc1tbMV1dICU+JSAKICBmaWx0ZXIoQWZmZWN0ZWQgJWluJSBjKCJVbml0ZWQgU3RhdGVzIiwiR2xvYmFsIikpICU+JSAKICBzZXBhcmF0ZShQZXJpb2QsYygiZGVzZGUiLCJoYXN0YSIpLCIg4oCTICIpCgoKI2VuIHJlYWxpZGFkIGxhcyBxdWUgdGVybWluYW4gZW4gInMiIG5vIGR1cmFuIHRvZGEgbGEgZMOpY2FkYS4gTGFzIGFncmVnbyBhIG1hbm8uCiAgIyBtdXRhdGUoaGFzdGEgPSBwYXJzZV9kYXRlX3RpbWUoY2FzZV93aGVuKGdyZXBsKCJzIixkZXNkZSl+YXMubnVtZXJpYyhzdHJfZXh0cmFjdChkZXNkZSwiW1s6ZGlnaXQ6XV0qIikpKzEwLAogICMgICAgICAgICAgICAgICAgICAgICAgICAgIFRSVUV+IGFzLm51bWVyaWMoaGFzdGEpKSwieSIpLAogICMgICAgICAgIGRlc2RlID0gcGFyc2VfZGF0ZV90aW1lKHN0cl9leHRyYWN0KGRlc2RlLCJbWzpkaWdpdDpdXSoiKSwieSIpKQoKY3Jpc2lzIDwtIGNyaXNpcyAlPiUgCiAgbXV0YXRlKGhhc3RhID0gcGFyc2VfZGF0ZV90aW1lKGNhc2Vfd2hlbihkZXNkZT09IjE5NzBzIn4iMTk3OSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlc2RlPT0iMTk4MHMifiIxOTgyIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVzZGUgPT0gIjE5OTBzIn4iMTk5MSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgIFRSVUV+aGFzdGEpLCJ5IiksCiAgICAgICAgIGRlc2RlID0gcGFyc2VfZGF0ZV90aW1lKGNhc2Vfd2hlbihkZXNkZT09IjE5NzBzIn4iMTk3MyIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlc2RlPT0iMTk4MHMifiIxOTgxIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVzZGU9PSIxOTkwcyJ+IjE5OTAiLAogICAgICAgICAgICAgICAgICAgICAgICAgICBUUlVFfmRlc2RlKSwieSIpKQoKCmBgYAoKCmBgYHtyfQojIHRhYmxhIDwtIGNyaXNpcyAlPiUKIyAgIGZpbHRlcihBZmZlY3RlZCAlaW4lIGMoIlVuaXRlZCBTdGF0ZXMiLCJHbG9iYWwiKSkgJT4lCiMgICBzZWxlY3QoLVJlZ2lvbiwgLSBBZmZlY3RlZCkgJT4lCiMgICB4dGFibGUoLikKCiNFbiBsYSBjb25zb2xhCiMgcHJpbnQodGFibGEsIGluY2x1ZGUucm93bmFtZXMgPSBGKQoKYGBgCgoKYGBge3J9CmNyaXNpc19sYXJnYXMgPC0gbmEub21pdChjcmlzaXMpCmNyaXNpc19wdW50dWFsZXMgPC0gY3Jpc2lzICU+JSAKICBmaWx0ZXIoaXMubmEoaGFzdGEpKQoKCmRqYSA8LSBkamEgJT4lIAogIG11dGF0ZShkaWYgPSAoREpJQSAtIGxhZyhESklBLCBkZWZhdWx0ID0gREpJQVsxXSkpL2xhZyhESklBLCBkZWZhdWx0ID0gREpJQVsxXSkpIApnZ3Bsb3QoKSsKICBnZW9tX3JlY3QoZGF0YT0gY3Jpc2lzX2xhcmdhcywgCiAgICAgICAgICAgIGFlcyh4bWluPWNyaXNpc19sYXJnYXMkZGVzZGUsCiAgICAgICAgICAgIHhtYXg9Y3Jpc2lzX2xhcmdhcyRoYXN0YSksCiAgICAgICAgICAgIGZpbGw9ImZpcmVicmljayIsIAogICAgICAgICAgICB5bWluPS0xLAogICAgICAgICAgICB5bWF4PTEsCiAgICAgICAgICAgIGFscGhhPTAuNSkrCiAgICBnZW9tX2xpbmUoZGF0YSA9IGRqYSxhZXMoRGF0ZSwgZGlmKSkrCiAgZ2VvbV92bGluZShkYXRhPWNyaXNpc19wdW50dWFsZXMsIGFlcyh4aW50ZXJjZXB0PWRlc2RlKSwgY29sb3IgPSAicmVkIiwgbGluZXR5cGU9ImRhc2hlZCIpCiAgCgpgYGAKCgpFc3RlIGdyw6FmaWNvIG1lIGRhIGxhIHNlbnNhY2nDs24gZGUgcXVlIHRvZG8gZXN0dXZpZXJhIGNvcnJpZG8gYSBsYSBkZXJlY2hhIChtaXJhbmRvIGxhcyBjcmlzaXMgcHVudHVhbGVzIHZzIGxvcyBwaWNvcykKCiMgR29sZAoKYGBge3J9CmdvbGQgJT4lIAogIGdncGxvdCguLCBhZXMoWWVhciwgYE5ldyBZb3JrIE1hcmtldCBQcmljZSAoVS5TLiBkb2xsYXJzIHBlciBmaW5lIG91bmNlKWApKSsKICBnZW9tX2xpbmUoc2l6ZT0xKSsKICBnZW9tX3ZsaW5lKHhpbnRlcmNlcHQgPSAxOTcxLCBjb2xvciA9ICJyZWQiKSsKICBnZW9tX2xhYmVsX3JlcGVsKGRhdGE9ZGF0YV9mcmFtZSgpLGFlcyh4PTE5NzEseT0xMDAwLGxhYmVsPSJGaW4gZGVsIHBhdHLDs24gb3JvIiksbnVkZ2VfeCA9IC01LGZvcmNlPTEwLHNpemU9NykrCiAgdGhlbWVfbWluaW1hbCgpKwogIGxhYnMoeT0iRMOzbGFyZXMgcG9yIG9uemEgZGUgb3JvIiwgeD0iQcOxbyIsIHRpdGxlPSJQcmVjaW8gT3JvIE1lcmNhZG8gZGUgTnVldmEgWW9yayIsCiAgICAgICBzdWJ0aXRsZSA9ICJQcmVjaW8gcG9yIG9uemEuIDE3OTAtMjAxNyIpKwogIHRoZW1lKHRleHQgPSBlbGVtZW50X3RleHQoc2l6ZSA9IDIwKSkKCgpnZ3NhdmUoInBsb3RzL29yby5wbmciLCBkcGk9MzAwLCB3aWR0aCA9IDEwLCBoZWlnaHQgPSA3LCBzY2FsZT0xKQpgYGAKCmBgYHtyfQpnb2xkICU+JSAKICBnZ3Bsb3QoLiwgYWVzKFllYXIsIGBOZXcgWW9yayBNYXJrZXQgUHJpY2UgKFUuUy4gZG9sbGFycyBwZXIgZmluZSBvdW5jZSlgKSkrCiAgZ2VvbV9saW5lKHNpemU9MSkrCiAgZ2VvbV92bGluZSh4aW50ZXJjZXB0ID0gMTk3MSwgY29sb3IgPSAicmVkIikrCiAgZ2VvbV9sYWJlbF9yZXBlbChkYXRhPWRhdGFfZnJhbWUoKSxhZXMoeD0xOTcxLHk9MTAwMCxsYWJlbD0iRW5kIG9mIHRoZSBnb2xkIHN0YW5kYXJkIiksbnVkZ2VfeCA9IC01LGZvcmNlPTEwLHNpemU9NykrCiAgdGhlbWVfbWluaW1hbCgpKwogIGxhYnMoeT0iZG9sbGFycyBwZXIgZmluZSBvdW5jZSIsIHg9IlllYXIiLCB0aXRsZT0iR29sZCBwcmljZXMgTmV3IFlvcmsgTWFya2V0IiwKICAgICAgIHN1YnRpdGxlID0gIiBQcmljZSBwZXIgb3VuY2UuIDE3OTAtMjAxNyIpKwogIHRoZW1lKHRleHQgPSBlbGVtZW50X3RleHQoc2l6ZSA9IDIwKSkKCmdnc2F2ZSgicGxvdHMvb3JvX2VuLnBuZyIsIGRwaT0zMDAsIHdpZHRoID0gMTAsIGhlaWdodCA9IDcsIHNjYWxlPTEpCgpgYGAKCgoKIyMgaW50ZXJlc3RfcmF0ZQoKCmBgYHtyfQpncmFmIDwtIGludGVyZXN0X3JhdGUgJT4lIAogIGdhdGhlcih0eXBlLHJhdGUsMjo0KSAlPiUgCiAgZ2dwbG90KC4sIGFlcyhZZWFyLHJhdGUsY29sb3I9dHlwZSkpKwogIGdlb21fbGluZSgpKwogIGd1aWRlcyhjb2xvcj1ndWlkZV9sZWdlbmQobnJvdz0yLGJ5cm93PVRSVUUpKSsKICB0aGVtZShsZWdlbmQucG9zaXRpb24gPSAiYm90dG9tIikKZ2dwbG90bHkoZ3JhZikgJT4lCiAgbGF5b3V0KGxlZ2VuZCA9IGxpc3QoCiAgICAgIG9yaWVudGF0aW9uID0gImgiCiAgICApCiAgKQpgYGAKCi0gTGEgdGFzYSBkZSBsYXJnbyBwbGF6byBlcyB1bmEgc2VyaWUgbXVjaG8gbcOhcyBzdWF2ZSAoZXNvIGVzIHVuIGRhdG8gY29ub2NpZG8gZGUgZmluYW56YXMgbm8/KQotIExvcyBzdXJwbHVzIGZ1bmRzIHRhbWJpw6luIHBhcmVjZW4gc2VyIG3DoXMgdm9sw6F0aWxlcyBoYXN0YSBsb3MgNDAKCgojIyBzYXAKCgpgYGB7cn0Kc2FwICU+JSAKICBzdW1tYXJ5KCkKc2FwICU+JSAKICBnYXRoZXIodHlwZSwgdmFsdWUsMjo0KSAlPiUKICBtdXRhdGUodHlwZT0gY2FzZV93aGVuKHR5cGU9PSJUaGUgUyZQIEluZGV4IEF2ZXJhZ2UgZm9yIEphbnVhcnkifiJUaGUgUyZQIEluZGV4XG5BdmVyYWdlIGZvciBKYW51YXJ5IiwKICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU9PSJUaGUgQWNjdW11bGF0ZWQgUyZQIEluZGV4IEF2ZXJhZ2UgZm9yIEphbnVhcnkifiJUaGUgQWNjdW11bGF0ZWQgUyZQXG5JbmRleCBBdmVyYWdlIGZvciBKYW51YXJ5IiwKICAgICAgICAgICAgICAgICAgICAgICAgIFRSVUV+dHlwZSkpICU+JSAKICBnZ3Bsb3QoLixhZXMoWWVhcix2YWx1ZSwgY29sb3I9dHlwZSkpKwogIGdlb21fbGluZSgpKwogIGZhY2V0X2dyaWQodHlwZX4uLHNjYWxlPSJmcmVlIikrCiAgdGhlbWUobGVnZW5kLnBvc2l0aW9uID0gImJvdHRvbSIsCiAgICAgICAgc3RyaXAudGV4dC55ID0gZWxlbWVudF90ZXh0KGFuZ2xlID0gMCkpCgpgYGAKCgoKYGBge3J9CnRzKHNhcCRgQW5udWFsIFlpZWxkYCwgc3RhcnQ9bWluKHNhcCRZZWFyKSwgZnJlcXVlbmN5ID0gMSkgJT4lIAogIG5hLm9taXQoKSAlPiUKICBhdXRvLmFyaW1hKC4pCgpgYGAKCiMjIENQSQoKYGBge3J9CgpjcGkgJT4lIAogIGdncGxvdCguLCBhZXMoWWVhciwgYFUuUy4gQ29uc3VtZXIgUHJpY2UgSW5kZXggKmApKSsKICBnZW9tX2xpbmUoc2l6ZT0xKSsKICBnZW9tX3ZsaW5lKHhpbnRlcmNlcHQgPSAxOTcxLCBjb2xvciA9ICJyZWQiKSsKICBnZW9tX2xhYmVsX3JlcGVsKGRhdGE9ZGF0YV9mcmFtZSgpLGFlcyh4PTE5NzEseT0xMDAsbGFiZWw9IkZpbiBkZWwgcGF0csOzbiBvcm8iKSxudWRnZV94ID0gLTUsZm9yY2U9MTAsc2l6ZT03KSsKICB0aGVtZV9taW5pbWFsKCkrCiAgbGFicyh5PSJJUEMiLCB4PSJBw7FvIikrCiAgdGhlbWUodGV4dCA9IGVsZW1lbnRfdGV4dChzaXplID0gMjApKQoKZ2dzYXZlKCJwbG90cy9jcGlfb3JpZy5wbmciLCBzY2FsZSA9IDEpCmBgYAoKIyMgZ2RwCmBgYHtyfQpnZHAgJT4lIAogIGdncGxvdCguLCBhZXMoWWVhciwgYFJlYWwgR0RQIChtaWxsaW9ucyBvZiAyMDEyIGRvbGxhcnMpYCkpKwogIGdlb21fbGluZShzaXplPTEpKwogICMgZ2VvbV92bGluZSh4aW50ZXJjZXB0ID0gMTk3MSwgY29sb3IgPSAicmVkIikrCiAgIyBnZW9tX2xhYmVsX3JlcGVsKGRhdGE9ZGF0YV9mcmFtZSgpLGFlcyh4PTE5NzEseT0xMDAsbGFiZWw9IkZpbiBkZWwgcGF0csOzbiBvcm8iKSxudWRnZV94ID0gLTUsZm9yY2U9MTAsc2l6ZT03KSsKICB0aGVtZV9taW5pbWFsKCkrCiAgbGFicyh5PSJSZWFsIEdEUCIsIHg9IkHDsW8iKSsKICB0aGVtZSh0ZXh0ID0gZWxlbWVudF90ZXh0KHNpemUgPSAzMCkpCgpnZ3NhdmUoInBsb3RzL1BCSS5wbmciLCBzY2FsZSA9IDEpCgpgYGAKCgoKbWUgaW50ZXJlc2EgdmVyIGVsIFBCSSBub3JtYWxpemFkbyBwb3IgZWwgY3JlY2ltaWVudG8gcG9ibGFjaW9uYWwsIHkgYWRlbcOhcyBub3JtYWxpemFkbyBwb3IgbGEgY2FudGlkYWQgZGUgb3JvIHF1ZSBwdWVkZSBjb21wcmFyIChlbiBsdWdhciBkZSBub3JtYWxpemFyIHBvciBlbCBDUEkpOgoKYGBge3J9CgoKZ2RwIDwtIGxlZnRfam9pbihnb2xkLCBnZHAsIGJ5ID0gIlllYXIiKSAlPiUgCiAgbXV0YXRlKGdkcF9pbl9nb2xkID0gYE5vbWluYWwgR0RQIHBlciBjYXBpdGEgKGN1cnJlbnQgZG9sbGFycylgL2BOZXcgWW9yayBNYXJrZXQgUHJpY2UgKFUuUy4gZG9sbGFycyBwZXIgZmluZSBvdW5jZSlgLAogICAgICAgICBZZWFyID0gcGFyc2VfZGF0ZV90aW1lKFllYXIsInkiKSkgCiAgCmdncGxvdGx5KGdncGxvdChnZHAsYWVzKFllYXIsZ2RwX2luX2dvbGQpKSsKICBnZW9tX2xpbmUoKSkKYGBgCgpBIHBhcnRpciBkZWwgMTkwMCBwYXJlY2llcmEgcXVlIHNlIGFybWFuIDMgY2ljbG9zIG11eSBsYXJnb3MKCi0gMTkxNC0xOTMzCi0gMTkzMy0xOTgwCi0gMTk4MC0yMDEyCgoKQWdyZWdhbmRvIHJlZmVyZW5jaWFzIGhpc3TDs3JpY2FzIGRlIGxhcyBjcmlzaXMgY29ub2NpZGFzCiMgZ2RwX2luX2dvbGRfZWRhLlBORwoKCmBgYHtyfQpsaWJyYXJ5KHNjYWxlcykgIyB0byBhY2Nlc3MgYnJlYWtzL2Zvcm1hdHRpbmcgZnVuY3Rpb25zCmdncGxvdCgpKwpnZW9tX3JlY3QoZGF0YT0gY3Jpc2lzX2xhcmdhcywgCiAgICAgICAgICAgIGFlcyh4bWluPWNyaXNpc19sYXJnYXMkZGVzZGUsCiAgICAgICAgICAgIHhtYXg9Y3Jpc2lzX2xhcmdhcyRoYXN0YSksCiAgICAgICAgICAgIGZpbGw9ImZpcmVicmljayIsIAogICAgICAgICAgICB5bWluPS1JbmYsCiAgICAgICAgICAgIHltYXg9SW5mLAogICAgICAgICAgICBhbHBoYT0wLjUpKwogIGdlb21fbGluZShzaXplPTEsCiAgICBkYXRhID0gZ2RwICU+JSAKICAgICAgICAgICAgICBmaWx0ZXIoWWVhcj5wYXJzZV9kYXRlX3RpbWUoMTkwMCwieSIpKQogICAgICAgICAgICAsYWVzKFllYXIsIGdkcF9pbl9nb2xkKSkrCiAgZ2VvbV92bGluZShkYXRhPWNyaXNpc19wdW50dWFsZXMsIGFlcyh4aW50ZXJjZXB0PWRlc2RlKSwgY29sb3IgPSAicmVkIiwgbGluZXR5cGU9ImRhc2hlZCIpKwogIGdlb21fdmxpbmUoeGludGVyY2VwdCA9IHBhcnNlX2RhdGVfdGltZSgxOTcxLCJ5IiksY29sb3IgPSAiZ29sZCIpKyAjZmluIGRlbCBwYXRyb24gb3JvCiAgIyBzY2FsZV94X2RhdGV0aW1lKGRhdGVfYnJlYWtzID0gIjE1IHllYXJzIixsYWJlbHMgPSBkYXRlX2Zvcm1hdCgiJVkiKSApKwogIHNjYWxlX3hfZGF0ZXRpbWUoYnJlYWtzID0gcGFyc2VfZGF0ZV90aW1lKHNlcSgxOTAwLDIwMTcsIDE1KSwneScpLCBsYWJlbHMgPSBkYXRlX2Zvcm1hdCgiJVkiKSkrCiAgdGhlbWVfbWluaW1hbCgpKwogIGxhYnMoeD0iIiwgeT0iUEJJIGVuIG9ybyIsIHRpdGxlPSJQQkkgRXN0YWRvcyBVbmlkb3MiLAogICAgICAgc3VidGl0bGU9ICJNaWxsb25lcyBkZSBvbnphcyBkZSBvcm8sIDE5MDAtMjAxNyIpKwogIHRoZW1lKHRleHQgPSBlbGVtZW50X3RleHQoc2l6ZSA9IDIwKSkKCmdnc2F2ZSgicGxvdHMvZ2RwX2luX2dvbGRfZWRhLlBORyIsIGRwaSA9IDMwMCwgd2lkdGggPSAxMCxoZWlnaHQgPSA2KQpgYGAKCgpgYGB7cn0KZ2dwbG90KCkrCmdlb21fcmVjdChkYXRhPSBjcmlzaXNfbGFyZ2FzLCAKICAgICAgICAgICAgYWVzKHhtaW49Y3Jpc2lzX2xhcmdhcyRkZXNkZSwKICAgICAgICAgICAgeG1heD1jcmlzaXNfbGFyZ2FzJGhhc3RhKSwKICAgICAgICAgICAgZmlsbD0iZmlyZWJyaWNrIiwgCiAgICAgICAgICAgIHltaW49LUluZiwKICAgICAgICAgICAgeW1heD1JbmYsCiAgICAgICAgICAgIGFscGhhPTAuNSkrCiAgZ2VvbV9saW5lKHNpemU9MSwKICAgIGRhdGEgPSBnZHAgJT4lIAogICAgICAgICAgICAgIGZpbHRlcihZZWFyPnBhcnNlX2RhdGVfdGltZSgxOTAwLCJ5IikpCiAgICAgICAgICAgICxhZXMoWWVhciwgZ2RwX2luX2dvbGQpKSsKICBnZW9tX3ZsaW5lKGRhdGE9Y3Jpc2lzX3B1bnR1YWxlcywgYWVzKHhpbnRlcmNlcHQ9ZGVzZGUpLCBjb2xvciA9ICJyZWQiLCBsaW5ldHlwZT0iZGFzaGVkIikrCiAgZ2VvbV92bGluZSh4aW50ZXJjZXB0ID0gcGFyc2VfZGF0ZV90aW1lKDE5NzEsInkiKSxjb2xvciA9ICJnb2xkIikrIAogIHNjYWxlX3hfZGF0ZXRpbWUoYnJlYWtzID0gcGFyc2VfZGF0ZV90aW1lKHNlcSgxOTAwLDIwMTcsIDE1KSwneScpLCBsYWJlbHMgPSBkYXRlX2Zvcm1hdCgiJVkiKSkrCiAgIyBzY2FsZV94X2RhdGV0aW1lKGRhdGVfYnJlYWtzID0gIjE1IHllYXJzIixsYWJlbHMgPSBkYXRlX2Zvcm1hdCgiJVkiKSApKyAgCiAgdGhlbWVfbWluaW1hbCgpKwogIGxhYnMoeD0iIiwgeT0iR0RQIGluIGdvbGQiLCB0aXRsZT0iVVMgR0RQIiwKICAgICAgIHN1YnRpdGxlPSAiTWlsbGlvbnMgb2Ygb3VuY2VzIG9mIGdvbGQsIDE5MDAtMjAxNyIpKwogIHRoZW1lKHRleHQgPSBlbGVtZW50X3RleHQoc2l6ZSA9IDIwKSkKCmdnc2F2ZSgicGxvdHMvZ2RwX2luX2dvbGRfZWRhX2VuLlBORyIsIGRwaSA9IDMwMCwgd2lkdGggPSAxMCxoZWlnaHQgPSA2KQpgYGAKCgpMYSBndWVycmEgZGUgc2VzZXNpw7NuIGRlIEVFVVUgZnXDqSBlbnRyZSBlbCAxMiBkZSBhYnJpbCBkZSAxODYxIHkgZWwgOSBkZSBhYnJpbCBkZSAxODY1IAoKQSBwYXJ0aXIgZGUgYWjDrSBlbCBwYmkgZW4gb3JvIGNyZWNlIGhhc3RhIGVsIGZpbiBkZWwgcGF0cm9uIG9yby4KCiMjIHdhZ2UKCmBgYHtyfQp3YWdlICU+JSAKICBzdW1tYXJ5KCkKYGBgCgpQb2RlbW9zIGRlZmxhY3RhciBlbCBzYWxhcmlvIGhvcmFyaW8gcG9yIGVsIENQSQoKYGBge3J9CmdncGxvdGx5KAp3YWdlICU+JSAKICBsZWZ0X2pvaW4oY3BpLGJ5PSJZZWFyIikgJT4lIAogIG5hLm9taXQoKSAlPiUgCiAgbXV0YXRlKHNhbGFyaW9faG9yYXJpb19yZWFsID0gYFByb2R1Y3Rpb24gV29ya2VycyBIb3VybHkgQ29tcGVuc2F0aW9uIChub21pbmFsIGRvbGxhcnMpYC9gVS5TLiBDb25zdW1lciBQcmljZSBJbmRleCAqYCkgJT4lIAogIGdncGxvdCguLGFlcyhZZWFyLHNhbGFyaW9faG9yYXJpb19yZWFsKSkrCiAgZ2VvbV9saW5lKCkgCiAgKQpgYGAKCgpgYGB7cn0Kd2FnZSAlPiUgCiAgc3VtbWFyeSgpCmBgYAoKUG9kZW1vcyBkZWZsYWN0YXIgZWwgc2FsYXJpbyBob3JhcmlvIHBvciBlbCBDUEkKCmBgYHtyfQpnZ3Bsb3RseSgKd2FnZSAlPiUgCiAgbGVmdF9qb2luKGNwaSxieT0iWWVhciIpICU+JSAKICBuYS5vbWl0KCkgJT4lIAogIG11dGF0ZShzYWxhcmlvX2hvcmFyaW9fcmVhbCA9IGBQcm9kdWN0aW9uIFdvcmtlcnMgSG91cmx5IENvbXBlbnNhdGlvbiAobm9taW5hbCBkb2xsYXJzKWAvYFUuUy4gQ29uc3VtZXIgUHJpY2UgSW5kZXggKmApICU+JSAKICBnZ3Bsb3QoLixhZXMoWWVhcixzYWxhcmlvX2hvcmFyaW9fcmVhbCkpKwogIGdlb21fbGluZSgpIAogICkKYGBgCgoKYGBge3J9CndnX2dvbGQgPC0gd2FnZSAlPiUgCiAgZmlsdGVyKFllYXI+PTE5MDApICU+JSAKICBsZWZ0X2pvaW4oZ29sZCwgZ2RwLCBieSA9ICJZZWFyIikgJT4lIAogIG11dGF0ZSh3Z19pbl9nb2xkID0gYFByb2R1Y3Rpb24gV29ya2VycyBIb3VybHkgQ29tcGVuc2F0aW9uIChub21pbmFsIGRvbGxhcnMpYC9gTmV3IFlvcmsgTWFya2V0IFByaWNlIChVLlMuIGRvbGxhcnMgcGVyIGZpbmUgb3VuY2UpYCwKICAgICAgICAgWWVhciA9IHBhcnNlX2RhdGVfdGltZShZZWFyLCJ5IikpICU+JSAKICBuYS5vbWl0KCkgIAoKCmdncGxvdCgpKwpnZW9tX3JlY3QoZGF0YT0gY3Jpc2lzX2xhcmdhcywgCiAgICAgICAgICAgIGFlcyh4bWluPWNyaXNpc19sYXJnYXMkZGVzZGUsCiAgICAgICAgICAgIHhtYXg9Y3Jpc2lzX2xhcmdhcyRoYXN0YSksCiAgICAgICAgICAgIGZpbGw9ImZpcmVicmljayIsIAogICAgICAgICAgICB5bWluPS1JbmYsCiAgICAgICAgICAgIHltYXg9SW5mLAogICAgICAgICAgICBhbHBoYT0wLjUpKwogIGdlb21fbGluZShzaXplPTEsZGF0YSA9IHdnX2dvbGQsIGFlcyhZZWFyLCB3Z19pbl9nb2xkKSkrCiAgZ2VvbV92bGluZShkYXRhPWNyaXNpc19wdW50dWFsZXMsIGFlcyh4aW50ZXJjZXB0PWRlc2RlKSwgY29sb3IgPSAicmVkIiwgbGluZXR5cGU9ImRhc2hlZCIpKwogIGdlb21fdmxpbmUoeGludGVyY2VwdCA9IHBhcnNlX2RhdGVfdGltZSgxOTcxLCJ5IiksY29sb3IgPSAiZ29sZCIpKyAjZmluIGRlbCBwYXRyb24gb3JvCiAgc2NhbGVfeF9kYXRldGltZShicmVha3MgPSBwYXJzZV9kYXRlX3RpbWUoc2VxKDE5MDAsMjAxNywgMTUpLCd5JyksIGxhYmVscyA9IGRhdGVfZm9ybWF0KCIlWSIpKSsKICAjIHNjYWxlX3hfZGF0ZXRpbWUoZGF0ZV9icmVha3MgPSAiMTUgeWVhcnMiLGxhYmVscyA9IGRhdGVfZm9ybWF0KCIlWSIpICkrCiAgdGhlbWVfbWluaW1hbCgpKyAgCiAgbGFicyh4PSIiLCB5PSJTYWxhcmlvIGVuIG9ybyIsIHRpdGxlPSJTYWxhcmlvIGhvcmFyaW8gRXN0YWRvcyBVbmlkb3MiLAogICAgICAgc3VidGl0bGU9Ik9uemFzIGRlIG9ybywgMTkwMC0yMDE3IikrCiAgdGhlbWUodGV4dCA9IGVsZW1lbnRfdGV4dChzaXplID0gMjApKQoKCmdnc2F2ZSgicGxvdHMvd2dfaW5fZ29sZF9lZGEuUE5HIiwgZHBpID0gMzAwLCB3aWR0aCA9IDEwLGhlaWdodCA9IDYpCgpgYGAKCgpgYGB7cn0KZ2dwbG90KCkrCmdlb21fcmVjdChkYXRhPSBjcmlzaXNfbGFyZ2FzLCAKICAgICAgICAgICAgYWVzKHhtaW49Y3Jpc2lzX2xhcmdhcyRkZXNkZSwKICAgICAgICAgICAgeG1heD1jcmlzaXNfbGFyZ2FzJGhhc3RhKSwKICAgICAgICAgICAgZmlsbD0iZmlyZWJyaWNrIiwgCiAgICAgICAgICAgIHltaW49LUluZiwKICAgICAgICAgICAgeW1heD1JbmYsCiAgICAgICAgICAgIGFscGhhPTAuNSkrCiAgZ2VvbV9saW5lKHNpemU9MSxkYXRhID0gd2dfZ29sZCwgYWVzKFllYXIsIHdnX2luX2dvbGQpKSsKICBnZW9tX3ZsaW5lKGRhdGE9Y3Jpc2lzX3B1bnR1YWxlcywgYWVzKHhpbnRlcmNlcHQ9ZGVzZGUpLCBjb2xvciA9ICJyZWQiLCBsaW5ldHlwZT0iZGFzaGVkIikrCiAgZ2VvbV92bGluZSh4aW50ZXJjZXB0ID0gcGFyc2VfZGF0ZV90aW1lKDE5NzEsInkiKSxjb2xvciA9ICJnb2xkIikrICNmaW4gZGVsIHBhdHJvbiBvcm8KICAjc2NhbGVfeF9kYXRldGltZShkYXRlX2JyZWFrcyA9ICIxNSB5ZWFycyIsbGFiZWxzID0gZGF0ZV9mb3JtYXQoIiVZIikgKSsKICBzY2FsZV94X2RhdGV0aW1lKGJyZWFrcyA9IHBhcnNlX2RhdGVfdGltZShzZXEoMTkwMCwyMDE3LCAxNSksJ3knKSwgbGFiZWxzID0gZGF0ZV9mb3JtYXQoIiVZIikpKwogIHRoZW1lX21pbmltYWwoKSsgIAogIGxhYnMoeD0iIiwgeT0iV2FnZSBpbiBnb2xkIiwgdGl0bGU9IlVTIEhvdXJseSBXYWdlIiwKICAgICAgIHN1YnRpdGxlPSJPdW5jZXMgb2YgZ29sZCwgMTkwMC0yMDE3IikrCiAgdGhlbWUodGV4dCA9IGVsZW1lbnRfdGV4dChzaXplID0gMjApKQoKCmdnc2F2ZSgicGxvdHMvd2dfaW5fZ29sZF9lZGFfZW4uUE5HIiwgZHBpID0gMzAwLCB3aWR0aCA9IDEwLGhlaWdodCA9IDYpCgpgYGAKCgpTZSB2ZW4gbG9zIG1pc21vcyB0cmVzIHBlcsOtb2Rvcy4gUGVybyBhIGRpZmVyZW5jaWEgZGVsIEdEUCwgZWwgcGVyw61vZG8gMTk4MC0yMDEyIHRpZW5lIHVuIG5pdmVsIG3DoXMgYmFqbyBxdWUgZWwgYW50ZXJpb3IuIAogCgrCvyBTaSBxdWlzaWVyYW1vcyBjb21wYXJhciBpbmdyc29zIGNvbiBhbGfDum4gcmV2ZW51ZSB0ZW5kcsOtYW1vcyB1c2FyIFMmUCBvIERKQT8KCgojIyMjIFVLCgpgYGB7cn0Kb3JvIDwtIGZ1bGxfam9pbihicml0X2dvbGQsZ29sZF9sb25kb24pCgpuYW1lcyhvcm8pCgpgYGAKCgpgYGB7cn0KCiNkZSBodHRwOi8vZnguc2F1ZGVyLnViYy5jYS9kYXRhLmh0bWwKdGMgPC0gcmVhZF9jc3YoImRhdGEvZXhfcmF0ZS5jc3YiKQoKbGlicmFyeShsdWJyaWRhdGUpCgp0YyA8LSB0YyAlPiUgbXV0YXRlKGRhdGUgPSBwYXJzZV9kYXRlX3RpbWUoYE1NTSBZWVlZYCwibXkiKSwKICAgICAgICAgICAgICBZZWFyID0geWVhcihkYXRlKSkgJT4lIAogIGdyb3VwX2J5KFllYXIpICU+JSAKICBzdW1tYXJpc2UoZ2JwX3VzZCA9IG1lYW4oYEdCUC9VU0RgKSkKCgojZGUgaHR0cDovL2Z4LnNhdWRlci51YmMuY2EvZXRjL1VTRHBhZ2VzLnBkZgoKdGNfMTk1MF8xOTcwIDwtIGRhdGFfZnJhbWUoWWVhcj0xOTUwOjE5NzAsIGdicF91c2QgPSAwLjM1NzE0KSAlPiUgCiAgbXV0YXRlKGdicF91c2QgPSBjYXNlX3doZW4oWWVhciA9PTE5NjcgfiAwLjM2MjEwLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIFllYXIgPjE5NjcgfiAwLjQxNjY3LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRSVUUgfiBnYnBfdXNkKSkKCnRjIDwtIGJpbmRfcm93cyh0Y18xOTUwXzE5NzAsdGMpCnRjCmBgYAoKCgpleHByZXNvIGFsIG9ybyBzaWVtcHJlIGVuIHBvdW5kcwoKYGBge3J9CnRhaWwob3JvKQoKCm9ybyRgTG9uZG9uIE1hcmtldCBQcmljZSAoQnJpdGlzaCAmcG91bmQ7IFsxNzE4LTE5NDldIG9yIFUuUy4gJCBbMTk1MC0yMDExXSBwZXIgZmluZSBvdW5jZSlgCgpvcm8gPC0gb3JvICU+JSAKICBmaWx0ZXIoWWVhciAlaW4lIGMoMTcwMDoyMDE3KSkgJT4lIAogIG11dGF0ZShzZXJpZV91bmlmaWNhZGEgPSBjYXNlX3doZW4oWWVhciA8IDE3MTggfiBgQnJpdGlzaCBPZmZpY2lhbCBQcmljZSAoQnJpdGlzaCBwb3VuZHMgcGVyIGZpbmUgb3VuY2UgZW5kIG9mIHllYXIpYCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFllYXIgPj0xNzE4IH5gTG9uZG9uIE1hcmtldCBQcmljZSAoQnJpdGlzaCAmcG91bmQ7IFsxNzE4LTE5NDldIG9yIFUuUy4gJCBbMTk1MC0yMDExXSBwZXIgZmluZSBvdW5jZSlgKSkKCiMjIFRlbmdvIHF1ZSBwYXNhciB0b2RvIGEgbGlicmFzLCBkZXNkZSAxOTUwIGFsIHNlcmllIGVzdGEgZW4gZMOzbGFyZXMKCm9ybyA8LSBvcm8gJT4lIAogIGxlZnRfam9pbih0YykgJT4lIAogIG11dGF0ZShzZXJpZV91bmlmaWNhZGEgPSBjYXNlX3doZW4oWWVhcj4xOTUwIH4gc2VyaWVfdW5pZmljYWRhKmdicF91c2QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUUlVFIH4gc2VyaWVfdW5pZmljYWRhKSkKICAKZ2dwbG90KG9ybywgYWVzKFllYXIsIHNlcmllX3VuaWZpY2FkYSkpKwogIGdlb21fbGluZSgpCgpgYGAKCgojIyBQQkkgdWsgZW4gb3JvCgoKYGBge3J9CgpnZHBfdWsgPC0gZ2RwX3VrICU+JSAKICBsZWZ0X2pvaW4ob3JvKSAlPiUgCiAgbXV0YXRlKGdkcF9pbl9nb2xkID0gYE5vbWluYWwgR0RQIChtaWxsaW9uIG9mIHBvdW5kcylgL3NlcmllX3VuaWZpY2FkYSkKCgpjcmlzaXMgPC0gZ2RwX3VrICU+JSAKICBmaWx0ZXIoWWVhciAlaW4lIGMoMTcwMDoxOTAwKSkgJT4lIAogIG11dGF0ZShjcmlzaXMgPWdkcF9pbl9nb2xkKSAlPiUgCiAgZmlsdGVyKFllYXIgJWluJSBjKDE3OTQsMTgwMywgMTgxMiwgMTgyMiwxODMzLDE4NDIsMTg1MCwgMTg1OCwgMTg2OCwxODc5LCAxODg1LCAxODkzKSkKCmdkcF91ayAlPiUgCiAgZmlsdGVyKFllYXIgJWluJSBjKDE3MDA6MTkwMCkpICU+JSAKZ2dwbG90KC4sIGFlcyhZZWFyLCBnZHBfaW5fZ29sZCkpKwogIGdlb21fbGluZShzaXplPTEpKwogIGdlb21fdGV4dF9yZXBlbChkYXRhID0gY3Jpc2lzLCBhZXMoWWVhciwgY3Jpc2lzLGxhYmVsPVllYXIpLG51ZGdlX3ggPSA1LCBudWRnZV95ID0gLTIwLGZvcmNlPTEyLHNpemU9NCkrCiAgdGhlbWVfbWluaW1hbCgpKwogIGxhYnMoeT0iUEJJIGVuIG9ybyIsIHg9IkHDsW8iLCB0aXRsZT0gIlByb2R1Y3RvIEJydXRvIEludGVybm8gUmVpbm8gVW5pZG8iLCAKICAgICAgIHN1YnRpdGxlPSJNaWxsb25lcyBkZSBvbnphcyBkZSBvcm8uIDE3MDAtMTkwMCIpKwogIHRoZW1lKHRleHQgPSBlbGVtZW50X3RleHQoc2l6ZSA9IDIwKSkKCgpnZ3NhdmUoInBsb3RzL3VrX2dkcC5wbmciLHNjYWxlID0gMSkKYGBgCgpgYGB7cn0KZ2RwX3VrICU+JSAKICBmaWx0ZXIoWWVhciAlaW4lIGMoMTcwMDoxOTAwKSkgJT4lIApnZ3Bsb3QoLiwgYWVzKFllYXIsIGdkcF9pbl9nb2xkKSkrCiAgZ2VvbV9saW5lKHNpemU9MSkrCiAgZ2VvbV90ZXh0X3JlcGVsKGRhdGEgPSBjcmlzaXMsIGFlcyhZZWFyLCBjcmlzaXMsbGFiZWw9WWVhciksbnVkZ2VfeCA9IDUsIG51ZGdlX3kgPSAtMjAsZm9yY2U9MTIsc2l6ZT00KSsKICB0aGVtZV9taW5pbWFsKCkrCiAgbGFicyh5PSJHRFAgaW4gZ29sZCIsIHg9IiIsIHRpdGxlPSAiVUsgR0RQIiwgCiAgICAgICBzdWJ0aXRsZT0iTWlsbGlvbnMgb2Ygb3VuY2VzIG9mIGdvbGQuIDE3MDAtMTkwMCIpKwogIHRoZW1lKHRleHQgPSBlbGVtZW50X3RleHQoc2l6ZSA9IDIwKSkKCgpnZ3NhdmUoInBsb3RzL3VrX2dkcF9lbi5wbmciLHNjYWxlID0gMSkKYGBgCgoKCgpgYGB7cn0KZ2RwX3VrICU+JSAKICB3cml0ZV9jc3YoImRhdGEvZ2RwX3VrX2dvbGQuY3N2IikKYGBgCgoKCgoKCgo=